﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Confection;
using Logic;

namespace _2_Лабраторная
{
    //partial - для компилятора, чтобы он знал что есть части этого класса в другом файле
    public partial class Form1 : Form
    {
        List<AbstractConfection> Gift = new List<AbstractConfection>();
        Creator creator;
        //вывод списка
        public void ListOut()
        {
            int counter = 1;
            listBox1.Items.Clear();
            if (Gift.Count!=0)
            {
                listBox1.Items.Add("Список");
                foreach (AbstractConfection sweet in Gift)
                {
                    listBox1.Items.Add(counter+") "+sweet.name);
                    counter++;
                }
            }
            else
                listBox1.Items.Add("список пуст");
        }

        //конструктор формы
        public Form1()
        {
            //метод поддержки конструктора
            InitializeComponent();
            Factory factory = new Factory();
            Gift = factory.CreateGift();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ListOut();
            error.Visible = false;
        }

        //выход
        private void button1_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }

        //Добавить элемент
        private void Add_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            int weight = 0;
            try
            {
                weight = Convert.ToInt32(textBox1.Text);
                    switch (comboBox1.SelectedItem.ToString())
                    {
                        case "Сникерс":
                            creator = new SnickersCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлен Сникерс");
                            break;
                        case "ChocoPie":
                            creator = new ChocoPieCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлен ChocoPie");
                            break;
                        case "Чупа-чупс":
                            creator = new ChupaChupsCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлен Чупа-чупс");
                            break;
                        case "Орбит Лайм":
                            creator = new OrbitLimeCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлен Орбит Лайм");
                            break;
                        case "Каракум":
                            creator = new KaracumCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлен Каракум");
                            break;
                        case "Аленка":
                            creator = new AlenkaCreator();
                            Gift.Add(creator.FactoryMethod(weight));
                            listBox1.Items.Add("Добавлена Аленка");
                            break;
                    }
            }
            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "некорректный ввод";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите элемент для добавления и укажите вес");
            }
        }

        //Очистка списка
        private void Clear_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("список очищен");
            Gift.Clear();
        }

        //Вывод списка
        private void Out_Click(object sender, EventArgs e)
        {
            ListOut();
        }

        private void CountNumber_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Количество элементов в списке: "+Gift.Count);
        }

        private void Count_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Общий вес подарка:");
            Counter counter = new Counter();
            listBox1.Items.Add(counter.Count(Gift));
        }

        private void button4_Click(object sender, EventArgs e)
        {
            int index;
            listBox1.Items.Clear();
            try
            {
                index = Convert.ToInt32(textBox1.Text);
                if (Gift.Count!=0)
                {
                    if ((0 < index) && (index <= Gift.Count))
                    {
                        listBox1.Items.Add("Удален элемент под номером: " + index);
                        Gift.RemoveAt(index-1);

                    }
                    else
                    {
                        error.Visible = true;
                        if (Gift.Count != 0)
                        {
                            error.Text = "Укажите индекс в пределах от 1 до " + Gift.Count;
                        }
                    }
                }
                else
                {
                    error.Visible = true;
                    error.Text = "Список пуст, нет элементов для удаления";
                }
            }
            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "некорректный ввод";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите номер элемента для удаления");
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            error.Visible = false;
        }
    }
}
